import { Node, UITransform, Layers, SpriteFrame } from 'cc'
// 这里定义了一个名为 createUINode 的函数，
// 该函数接受一个可选的字符串参数 name，其默认为空字符串。
// 这个函数的目的是封装创建 UI 节点的过程。
export const createUINode = (name: string = '') => {
  // 该行代码使用传入的 name 参数来创建一个新的 Node 实例。
  // 这个节点将用于 UI 组件的组合和管理。
  const node = new Node(name)
  // 在节点上添加一个 UITransform 组件。
  // 这个组件用于处理节点的位移、旋转、缩放和锚点等 UI 属性。
  const transForm = node.addComponent(UITransform)
  // 通过上述代码，将节点的锚点设置为 (0, 1)，这意味着锚点位于节点的左上角。
  // 锚点在 UI 排版中非常重要，因为它决定了节点在父节点中位置的参考点。
  transForm.setAnchorPoint(0, 1)
  // 将节点的层级设置为 UI_2D 层，
  // 这样可以确保该节点在渲染时位于 2D UI 的正确层次上。
  node.layer = Layers.Enum.UI_2D
  return node
}

// 传入两个数字 start 和 end，返回一个随机数，
export const randomByRange = (start: number, end: number) => Math.floor(start + (end - start) * Math.random())

// 取出字符串中括号内的数字
const reg = /\((\d+)\)/
const getNumberWithinString = (str: string) => {
  return parseInt(str.match(reg)[1] || '0')
}

export const sortSpriteFrame = (spriteFrames: SpriteFrame[]) => {
  return spriteFrames.sort((a, b) => {
    return getNumberWithinString(a.name) - getNumberWithinString(b.name)
  })
}

export const randomByLen = (len: number) => {
  return Array.from({ length: len }).reduce<string>((total, _) => {
    return total + Math.floor(Math.random() * 10)
  }, '')
}
